package basic

import (
	"fmt"
	"sync"
	"time"
)

func BasicTimeTimer() bool {
	// 创建一个在 2 秒后触发的定时器
	timer := time.NewTimer(2 * time.Second)

	wg := sync.WaitGroup{}
	// 启动定时器（创建时已自动启动）
	wg.Add(1)
	go func() {
		// 定时器到期在再返回
		defer wg.Done()
		<-timer.C // 等待定时器到期
		fmt.Println("Timer expired")
	}()

	// 模拟一些其他操作
	fmt.Println("Waiting for timer to expire...")
	//time.Sleep(3 * time.Second)
	wg.Wait()

	// 停止定时器（如果需要）
	// It returns true if the call stops the timer, false if the timer has already
	// expired or been stopped.
	if !timer.Stop() {
		// 如果定时器已经到期，则 <-timer.C 会返回 true
		fmt.Println("Timer already expired and fired")
		return true
	} else {
		fmt.Println("Timer stopped before it expired")
		return false
	}
}

func BasicTimeTicker() bool {
	// 创建一个每秒触发一次的 Ticker
	ticker := time.NewTicker(1 * time.Second)

	// 启动 Ticker（创建时已自动启动）
	go func() {
		for t := range ticker.C {
			fmt.Println("Tick at:", t)
		}
	}()

	// 模拟一些其他操作
	fmt.Println("Ticker running...")
	time.Sleep(5 * time.Second)

	// 停止 Ticker
	ticker.Stop()
	fmt.Println("Ticker stopped")

	return true
}
